﻿#define _CRT_SECURE_NO_WARNINGS 1
#include"Heap.h"
// 对数组进行堆排序
void HeapSort(int* a, int n)
{
	Heap hp;
	HeapCreate(&hp);
	for (int i = 0; i < n; i++)
	{
		HeapPush(&hp,a[i]);//将数组里面的数字全部储存进堆里面
	}
	int i = 0;
	while (!HeapEmpty(&hp))
	{
		int val = HeapTop(&hp);
		a[i++] = val;
		HeapPop(&hp);
	}
	HeapDestory(&hp);//使用这种堆排序的话你建立大堆最后出现的就是降序，而小堆就是升序
	//这种方法可行但是需要我们1先写一个完整的堆，并且这样的写法空间复杂度很高﻿,而且需要我们拷贝数据
}
int main()
{
	Heap hp;
	HeapCreate(&hp);
	HeapPush(&hp,1);
	HeapPush(&hp, 2);
	HeapPush(&hp, 3);
	HeapPush(&hp, 4);
	HeapPush(&hp, 5);
	HeapPush(&hp, 6);
	HeapPush(&hp, 7);
	HeapPush(&hp, 8);
	HeapPush(&hp, 9);
	while (!HeapEmpty(&hp))
	{
		int val = HeapTop(&hp);//获取到栈顶元素
		printf("%d\n", val);
		HeapPop(&hp);//将栈顶元素删除
	}//这里我们就实现了数据的有序打印，只需要通过改变一点点代码即可实现第一种堆排序的代码
	int arr[] = { 1,4,7,8,5,2,9,6,3,10 };
	HeapSort(arr, sizeof(arr) / sizeof(arr[0]));
	for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
	{
		printf("%d ", arr[i]);
	}

	printf("\n");
	//HeapDestory(&hp);//最后销毁这个堆
	return 0;
}